
Slim rendering pipeline:
This is an overview of the design of the slim rendering pipeline.  All steps marked with (...) are optional based on the desired speed/accuracy tradeoff.

                               main
                             .---+--.
                            /    |   \
            .--------------'     |    '------------+----------.
           /                     |                 |           \ 
        load scene          render scene  <----handle input      save output
         |                       |
  parse args                     |
  read scene file                |
  parse scene file               |
  load modules                   |
  setup scene                    |
                   .----------+--'---------.
                  /           |             \
       binary-tree split   generate     pixel shaders
                              |              |
        .---------------------'             calc
       /                                   (evaluate)
  (select rays) <--.                         |
   cast            | <-----------------------'
   vertex shaders  |
  (evaluate)       |
        |          |
        '----------'


Slim datatypes:

framebuffer-
    pixel color                                        24  (8-48)
    pixel alpha                                        8  (1-16)
    object hit index                                   8  (4-16)
    Stores z-intersect index                           8  (8-32)
    Stores angle of intersect                          4  (2-8)

vector/point-
    x,y,z value                                        32 (8-84)

scene_struct
	scene_name
	scene_file

loading:
	get the name, store in main_scene struct
	read the file, store in main_scene struct
	parse the file, create rest of main_scene
	load shading units, store in main_scene
	setup rest of main_scene

rendering:
	divide up the space
	intersect
		select rays to cast
		calc intersect
		interpolate
	calc color of each intersect
	repeat as needed
